package com.frame.library.skin.attr;

import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.frame.library.skin.SkinManager;
import com.frame.library.skin.SkinResource;

/**
 * Added by Tom on 2024/07/02.
 * 获取想要的资源 枚举类。
 */
public enum SkinType {
    // 皮肤要处理的类型type. 枚举类
    TEXT_COLOR("textColor") { // 文本的颜色 textColor
        @Override
        public void skin(View view, String resName) {
            SkinResource skinResource = getSkinResource();
            ColorStateList color = skinResource.getColorByName(resName);
            if (color == null) return; // 没有颜色，不更换textColor

            TextView textView = (TextView) view; // Button，EditText都是继承自TextView.
            textView.setTextColor(color);
        }
    }, BACKGROUND("background") { // 背景 background
        @Override
        public void skin(View view, String resName) {
            // 背景可能是图片Drawable，也可能是颜色Color。
            SkinResource skinResource = getSkinResource();
            Drawable drawable = skinResource.getDrawableByName(resName);
            if (drawable != null) { // 背景是图片
                view.setBackgroundDrawable(drawable);
                return;
            }
            // 背景是颜色color
            ColorStateList color = skinResource.getColorByName(resName);
            if (color != null) {
                view.setBackgroundTintList(color);
                // vew.setBackgroundColor(color.getDefaultColor());
            }
        }
    }, SRC("src") { // 图片资源 src
        @Override
        public void skin(View view, String resName) {
            // 获取资源
            SkinResource skinResource = getSkinResource();
            Drawable drawable = skinResource.getDrawableByName(resName);
            if (drawable != null) {
                ImageView imageView = (ImageView) view;
                imageView.setImageDrawable(drawable);
                return;
            }
        }
    };

    // 根据type的名字，调用对应的 skin() 方法。
    private String mResName;
    // 构造函数
    SkinType(String resName) {
        this.mResName = resName;
    }

    // 抽象方法，每个枚举都要自己实现 该抽象方法。
    public abstract void skin(View view, String resName);

    public String getResName() {
        return mResName;
    }

    // 抽取的公共方法
    public SkinResource getSkinResource() {
        return SkinManager.getInstance().getSkinResource();
    }

}
